.TH std::flat_map::insert_range 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::flat_map::insert_range \- std::flat_map::insert_range

.SH Synopsis
   template< container-compatible-range<value_type> R >  (since C++23)
   void insert_range( R&& rg );

   Inserts a copy of each element in the range rg into underlying containers c as if
   by:

 for (const auto& e : rg)
 {
     c.keys.insert(c.keys.end(), e.first);
     c.values.insert(c.values.end(), e.second);
 }

   Then, sorts the range of newly inserted elements with respect to value_comp().
   Merges the resulting sorted range and the sorted range of pre-existing elements into
   a single sorted range. Finally, erases the duplicate elements as if by:

 auto zv = views::zip(c.keys, c.values);
 auto it = ranges::unique(zv, key_equiv(compare)).begin();
 auto dist = std::distance(zv.begin(), it);
 c.keys.erase(c.keys.begin() + dist, c.keys.end());
 c.values.erase(c.values.begin() + dist, c.values.end());

   Each iterator in the range rg is dereferenced exactly once. The behavior is
   undefined if rg overlaps with the container.

    Information on iterator invalidation is copied from here

.SH Parameters

   rg - a container compatible range, that is, an input_range whose elements are
        convertible to T

.SH Return value

   \fI(none)\fP

.SH Complexity

   N + M·log(M), where N is size() before the operation and M is ranges::distance(rg).

.SH Notes

   Since insert_range performs an in-place merge operation, that may allocate memory.

.SH Example


// Run this code

 #include <iostream>
 #include <flat_map>
 #include <utility>

 void println(auto, auto const& container)
 {
     for (const auto& [key, value] : container)
         std::cout << '{' << key << ',' << value << '}' << ' ';
     std::cout << '\\n';
 }

 int main()
 {
     auto container = std::flat_map{std::pair{1, 11}, {3, 33}, {2, 22}, {4, 44}};
     const auto rg = {std::pair{-1, -11}, {3, -33}, {-2, -22}};
 #ifdef __cpp_lib_containers_ranges
     container.insert_range(rg);
 #else
     container.insert(rg.begin(), rg.end());
 #endif
     println("{}", container);
 }

.SH Output:

 {-2,-22} {-1,-11} {1,11} {2,22} {3,33} {4,44}

.SH See also

   insert inserts elements
          \fI(public member function)\fP
